package api

import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"os"
	"time"
)

var (
	datetime string
	welcome  string
	author   string
)

func init() {
	author = "venki.chen"
	now := time.Now()
	datetime = now.Format("2006-01-02 15:04:05")
	welcome = author + "欢迎你来到今日的golang语言学习，现在的时间是：" + datetime
}

func Access() {
	fmt.Println(welcome)
	fmt.Println("---------------------")
	fileOperator03()
}

// 文件操作03-适合文件内容不是很大的情况
func fileOperator03() {
	filepath := "../other/file.txt"
	/*这种方式是一次性将文件内容读进来，打开文件和关闭文件直接被封装到了ioutil.ReadFile*/
	content, err := ioutil.ReadFile(filepath)
	if err != nil {
		fmt.Println("read file err：", err)
	}

	fmt.Printf("%v", string(content)) // []byte
}

// 文件操作02
func fileOperator02() {
	file, err := os.Open("../other/file.txt")
	if err != nil {
		fmt.Println("open file err：", err)
	}

	// 程序执行结束，关闭文件句柄
	defer file.Close()

	/*创建一个*Reader并且是带缓存区的
	const (
		defaultBufSize = 4096 // 缓存区默认4096kb
	)
	*/
	reader := bufio.NewReader(file)

	// 循环读取文件内容
	for {
		str, err := reader.ReadString('\n') // 读到一个换行符那么结束该行的循环，开始下一行
		if err == io.EOF {                  // io.EOF表示文件的末尾
			break
		}
		fmt.Print(str)
	}

	fmt.Println("文件读取结束")
}

// 文件操作01
func fileOperator() {
	file, err := os.Open("../other/file.txt")
	if err != nil {
		fmt.Println("open file err：", err)
	}

	fmt.Printf("file=%v\n", file)

	err = file.Close()
	if err != nil {
		fmt.Println("close file err：", err)
	}
}
